﻿#ifndef CONFIG_H
#define CONFIG_H

#include <string>
#include <map>
#include <cstdlib>

class Config {
public:
    static Config& getInstance();
    
    bool loadFromFile(const std::string& filename);
    
    // 基础配置获取方法
    std::string getString(const std::string& key, const std::string& default_value = "");
    int getInt(const std::string& key, int default_value = 0);
    double getDouble(const std::string& key, double default_value = 0.0);
    bool getBool(const std::string& key, bool default_value = false);
    
    // 配置设置方法
    void setString(const std::string& key, const std::string& value);
    void setInt(const std::string& key, int value);
    void setDouble(const std::string& key, double value);
    void setBool(const std::string& key, bool value);
    
    // AI相关配置
    std::string getDeepSeekAPIKey() const;
    std::string getDeepSeekBaseURL() const;
    std::string getAIModel() const;
    double getAITemperature() const;
    int getAIMaxTokens() const;
    std::string getAISystemPrompt() const;
    
    // 服务器配置
    int getServerPort() const;
    std::string getDatabasePath() const;
    
    // 缓存配置
    bool isAICacheEnabled() const;
    int getMaxCacheSize() const;

private:
    Config() = default;
    ~Config() = default;
    Config(const Config&) = delete;
    Config& operator=(const Config&) = delete;
    
    std::map<std::string, std::string> config_data_;
    
    std::string trim(const std::string& str) const;
    bool parseLine(const std::string& line, std::string& key, std::string& value) const;
    
    // const版本的辅助方法
    std::string getString(const std::string& key, const std::string& default_value) const;
    int getInt(const std::string& key, int default_value) const;
    double getDouble(const std::string& key, double default_value) const;
    bool getBool(const std::string& key, bool default_value) const;
};

#endif // CONFIG_H
